package com.ht.demo.service.convert.system;

import com.ht.demo.common.appexception.AppErrorCodeEnum;
import com.ht.demo.common.appexception.AppException;
import com.ht.demo.common.constans.SystemConstant;
import com.ht.demo.common.pojo.bo.system.SysMenuBO;
import com.ht.demo.dao.domain.system.SysMenuDO;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang3.StringUtils;

import java.util.ArrayList;
import java.util.List;

/**
 * 类SysMenuBeanUtil.java的实现描述：菜单权限表工具类
 * 
 * @Author hdx
 * @Date 2023年04月28日
 */
public class SysMenuBeanUtil {

    private SysMenuBeanUtil(){
    }

    public static SysMenuDO sysMenuBOToDO(SysMenuBO srcObj) {
        if (srcObj == null) {
            return null;
        }
        SysMenuDO targetObj = new SysMenuDO();
        targetObj.setId(srcObj.getSysMenuId());//菜单ID
        targetObj.setMenuName(srcObj.getMenuName());//菜单名称
        targetObj.setParentId(srcObj.getParentId());//父菜单ID
        targetObj.setOrderNum(srcObj.getOrderNum());//显示顺序
        targetObj.setPath(srcObj.getPath());//路由地址
        targetObj.setComponent(srcObj.getComponent());//组件路径
        targetObj.setQuery(srcObj.getQuery());//路由参数
        targetObj.setIsFrame(srcObj.getIsFrame());//是否为外链（0是 1否）
        targetObj.setIsCache(srcObj.getIsCache());//是否缓存（0缓存 1不缓存）
        targetObj.setMenuType(srcObj.getMenuType());//菜单类型（M目录 C菜单 F按钮）
        targetObj.setVisible(srcObj.getVisible());//菜单状态（0显示 1隐藏）
        targetObj.setStatus(srcObj.getStatus());//菜单状态（0正常 1停用）
        targetObj.setPerms(srcObj.getPerms());//权限标识
        targetObj.setIcon(srcObj.getIcon());//菜单图标
        targetObj.setCreateBy(srcObj.getCreateBy());//创建者
        targetObj.setCreateTime(srcObj.getCreateTime());//创建时间
        targetObj.setUpdateBy(srcObj.getUpdateBy());//更新者
        targetObj.setUpdateTime(srcObj.getUpdateTime());//更新时间
        targetObj.setRemark(srcObj.getRemark());//备注
        targetObj.setAncestors(srcObj.getAncestors());//父级列表

        return targetObj;
    }

    public static SysMenuBO sysMenuDOToBO(SysMenuDO srcObj) {
        if (srcObj == null) {
            return null;
        }
        SysMenuBO targetObj = new SysMenuBO();
        targetObj.setSysMenuId(srcObj.getId());//菜单ID
        targetObj.setMenuName(srcObj.getMenuName());//菜单名称
        targetObj.setParentId(srcObj.getParentId());//父菜单ID
        targetObj.setOrderNum(srcObj.getOrderNum());//显示顺序
        targetObj.setPath(srcObj.getPath());//路由地址
        targetObj.setComponent(srcObj.getComponent());//组件路径
        targetObj.setQuery(srcObj.getQuery());//路由参数
        targetObj.setIsFrame(srcObj.getIsFrame());//是否为外链（0是 1否）
        targetObj.setIsCache(srcObj.getIsCache());//是否缓存（0缓存 1不缓存）
        targetObj.setMenuType(srcObj.getMenuType());//菜单类型（M目录 C菜单 F按钮）
        targetObj.setVisible(srcObj.getVisible());//菜单状态（0显示 1隐藏）
        targetObj.setStatus(srcObj.getStatus());//菜单状态（0正常 1停用）
        targetObj.setPerms(srcObj.getPerms());//权限标识
        targetObj.setIcon(srcObj.getIcon());//菜单图标
        targetObj.setCreateBy(srcObj.getCreateBy());//创建者
        targetObj.setCreateTime(srcObj.getCreateTime());//创建时间
        targetObj.setUpdateBy(srcObj.getUpdateBy());//更新者
        targetObj.setUpdateTime(srcObj.getUpdateTime());//更新时间
        targetObj.setRemark(srcObj.getRemark());//备注
        targetObj.setAncestors(srcObj.getAncestors());//父级列表
        return targetObj;
    }

    public static List<SysMenuBO> doList2BOList(List<SysMenuDO> doList) {
        List<SysMenuBO> boList = new ArrayList<>();
        if (CollectionUtils.isEmpty(doList)) return boList;

        doList.stream().forEach(d -> boList.add(SysMenuBeanUtil.sysMenuDOToBO(d)));
        return boList;
    }

    public static List<SysMenuDO> boList2DOList(List<SysMenuBO> boList) {
        List<SysMenuDO> doList = new ArrayList<>();
        if (CollectionUtils.isEmpty(boList)) return doList;

        boList.stream().forEach(b -> doList.add(SysMenuBeanUtil.sysMenuBOToDO(b)));
        return doList;
    }

    public static void saveCheckParam(SysMenuBO menuBO) throws AppException {
        if (menuBO == null) {
            throw new AppException(AppErrorCodeEnum.PARAMETER_NULL);
        }
        if (StringUtils.isBlank(menuBO.getMenuName())) {
            throw new AppException(AppErrorCodeEnum.PARAMETER_NULL);
        }
        //菜单类型（M目录 C菜单 F按钮）
        if (StringUtils.isBlank(menuBO.getMenuType())) {
            throw new AppException(AppErrorCodeEnum.PARAMETER_NULL);
        }
        if (menuBO.getParentId() == null) {
            throw new AppException("请选择上级菜单后提交");
        }
        if (menuBO.getOrderNum() == null) {
            menuBO.setOrderNum(0);
        }
        if (StringUtils.isBlank(menuBO.getStatus())) {
            //菜单状态（0正常 1停用）
            menuBO.setStatus(SystemConstant.STR_0);
        }
        //新增目录或菜单
        if (SystemConstant.M.equals(menuBO.getMenuType()) || SystemConstant.C.equals(menuBO.getMenuType())) {
            if (StringUtils.isBlank(menuBO.getPath())) {
                throw new AppException("路由地址不能为空");
            }
            if (StringUtils.isBlank(menuBO.getIsFrame())) {
                //是否为外链（0是 1否）
                menuBO.setIsFrame(SystemConstant.STR_1);
            }
        }

    }
}